本章節將會介紹如何使用 EmguCV 套件進行影像讀取,若未使用 NuGet 安裝EmguCV套件請參照上一篇文章[VS] C# - 使用 NuGet 進行套件安裝進行安裝。
主程式介面請參照圖一所示,元件功能如下所述:
圖一 MainForm介面
即便使用 NuGet 把套件安裝至專案,也需要透過 using
的方式把套件引用至類別,因此還是要針對套件進行引用。
using Emgu.CV;
using Emgu.CV.Structure;
string m_imagePath;
Image<Bgr, Byte> m_image;
備註:若使用
Image<Bgr, Byte>
底下出現錯誤,請注意是否引用using Emgu.CV.Structure
。
把路徑寫死固然容易,但我習慣為了讓整個軟體寫的比較彈性化,因此這邊採用的是路徑選擇視窗
讓使用者選擇位置,當然也可以把路徑寫死。
下面是常用的路徑選擇:
C:\Users\Nil\doc\image.bmp
。C:\Users\Nil\doc
。C:\Users\Nil\doc\{fileName}
。private void buttonGetImagePath_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
// 顯示預設路徑。
ofd.InitialDirectory = "./";
// 設定檔案儲存類型範例為.bmp若要增加其他類型可使用{名稱}|.{類型}。
ofd.Filter = "Bitmap Files|*.bmp";
ofd.Title = "選擇影像檔案";
// 紀錄最後視窗路徑位置。
ofd.RestoreDirectory = true;
// 顯示視窗,當按下確定(OK)時進入。
if (ofd.ShowDialog() == DialogResult.OK)
{
// 保存使用者選擇檔案的路徑位置
m_imagePath = ofd.FileName;
textBoxImagePath.Text = m_imagePath;
// 讀取影像並顯示。
DisplayImage(m_imagePath);
}
}
private void DisplayImage(string path)
{
try
{
// 為 Bitmap 讀取方式。
// Bitmap bitmap = new Bitmap(m_imagePath);
// 該方法則為 EmguCV 的讀取方式。
m_image = new Image<Bgr, byte>(path);
pictureBoxDisplayImage.Image = (Bitmap)m_image.ToBitmap().Clone();
pictureBoxDisplayImage.Invalidate();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Color 與 Depth 描述:
- Color: Gray, Bgr, Bgra, Hsv, Hls, Lab, Luv, Xyz, Ycc, Rgb or Rbga
- epth: Byte, SByte, Single, double, UInt16, Int16 or Int32
圖二 選擇檔案視窗
圖三 顯示影像
本篇文章透過選擇檔案視窗的方式取得使用者的路徑,並使用 EmguCV 的套件進行影像的讀取並顯示,雖然使用 Bitmap
也可以將影像讀入,但之後若要使用 EmguCV 的套件進行影像處理就可以不用將 Bitmap
再次轉換成 EmguCV的格式。
GitHub: Link.